Stack
沿一个新轴对输入张量序列进行堆叠。所有输入张量必须具有相同的形状。
\[\text{若输入 } num\_inputs \text{ 个形状为 } (d_0, d_1, \dots, d_{n-1}) \text{ 的张量,并在 } axis \text{ 处堆叠:}\]
\[output\_shape = (d_0, \dots, d_{axis-1}, num\_inputs, d_{axis}, \dots, d_{n-1})\]
- 输入:
inputs - 指针数组,包含所有输入张量起始地址的数组。
input_shape - 所有输入张量共用的形状(shape)数组。
num_inputs - 输入张量的数量。
axis - 堆叠操作插入新维度的位置。
input_ndim - 输入张量的维度数(秩)。
core_mask(int, 可选) - 核掩码(仅适用于共享存储版本)。
- 输出:
output - 计算结果存储地址。
- 支持平台:
FT78NEMT7004
备注
FT78NE 支持 int8, int16, int32, fp32, fp64, cplx64, cplx128
MT7004 支持 fp16, fp32, int16, int32, cplx64
所有输入张量必须具有完全一致的 input_shape。
输出张量的维度将比输入张量多 1。
共享存储版本:
-
void i8_stack_s(int8_t *inputs[], int *input_shape, int num_inputs, int axis, int input_ndim, int8_t *output, int core_mask)
-
void i16_stack_s(int16_t *inputs[], int *input_shape, int num_inputs, int axis, int input_ndim, int16_t *output, int core_mask)
-
void i32_stack_s(int32_t *inputs[], int *input_shape, int num_inputs, int axis, int input_ndim, int32_t *output, int core_mask)
-
void hp_stack_s(half *inputs[], int *input_shape, int num_inputs, int axis, int input_ndim, half *output, int core_mask)
-
void fp_stack_s(float *inputs[], int *input_shape, int num_inputs, int axis, int input_ndim, float *output, int core_mask)
-
void dp_stack_s(double *inputs[], int *input_shape, int num_inputs, int axis, int input_ndim, double *output, int core_mask)
-
void c64_stack_s(float *inputs[], int *input_shape, int num_inputs, int axis, int input_ndim, float *output, int core_mask)
-
void c128_stack_s(double *inputs[], int *input_shape, int num_inputs, int axis, int input_ndim, double *output, int core_mask)
C调用示例:
1// FT78NE 示例(共享存储) 2#include <stdio.h> 3#include "78NE/utils.h" 4 5int main() { 6 // 输入形状为 {4, 10, 8, 12} 7 int input_shape[] = { 4, 10, 8, 12 }; 8 int input_ndim = 4; 9 int num_inputs = 3; 10 int axis = 1; 11 int core_mask = 0b1011; 12 13 float *in0 = (float *)0xA0000000; 14 float *in1 = (float *)0xA2000000; 15 float *in2 = (float *)0xA4000000; 16 float *inputs[] = { in0, in1, in2 }; 17 float *output = (float *)0xB0000000; 18 // 输出形状将变为 {4, 3, 10, 8, 12} 19 20 fp_stack_s(inputs, input_shape, num_inputs, axis, input_ndim, output, core_mask); 21 return 0; 22}
私有存储版本:
-
void i8_stack_p(int8_t *inputs[], int *input_shape, int num_inputs, int axis, int input_ndim, int8_t *output)
-
void i16_stack_p(int16_t *inputs[], int *input_shape, int num_inputs, int axis, int input_ndim, int16_t *output)
-
void i32_stack_p(int32_t *inputs[], int *input_shape, int num_inputs, int axis, int input_ndim, int32_t *output)
-
void hp_stack_p(half *inputs[], int *input_shape, int num_inputs, int axis, int input_ndim, half *output)
-
void fp_stack_p(float *inputs[], int *input_shape, int num_inputs, int axis, int input_ndim, float *output)
-
void dp_stack_p(double *inputs[], int *input_shape, int num_inputs, int axis, int input_ndim, double *output)
-
void c64_stack_p(float *inputs[], int *input_shape, int num_inputs, int axis, int input_ndim, float *output)
-
void c128_stack_p(double *inputs[], int *input_shape, int num_inputs, int axis, int input_ndim, double *output)
C调用示例:
1// MT7004 示例(私有存储) 2#include <stdio.h> 3 4int main() { 5 int input_shape[] = { 2, 3, 4, 5 }; 6 int input_ndim = 4; 7 int num_inputs = 2; 8 int axis = 0; 9 10 float *in0 = (float *)0x10810000; 11 float *in1 = (float *)0x10812000; 12 float *inputs[] = { in0, in1 }; 13 float *output = (float *)0x10820000; 14 15 fp_stack_p(inputs, input_shape, num_inputs, axis, input_ndim, output); 16 return 0; 17}